tg-me.com/pro_python_code/1804
Last Update:
🐍 Python-задача с подвохом: “Список-призрак”
📘 Условие
Посмотри на этот код:
def append_item(item, lst=[]):
lst.append(item)
return lst
result1 = append_item(1)
result2 = append_item(2)
result3 = append_item(3)
print(result1)
print(result2)
print(result3)
❓ Вопрос:
Что выведет программа и почему?
🔍 Варианты ответа:
А)
[1]
[2]
[3]
Б)
[1]
[1, 2]
[1, 2, 3]
В)
[3]
[3]
[3]
✅ Правильный ответ: Б
Почему?
💥 Подвох: аргумент
lst=[]
— мутабельный объект, и он создаётся только один раз при определении функции, а не при каждом вызове.📌 То есть каждый вызов
append_item
модифицирует один и тот же список, который "помнит" все предыдущие элементы.✅ Как исправить:
def append_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
Теперь каждый вызов создаёт новый список, если его не передали явно.
⚠️ Подвох
• Аргументы по умолчанию вычисляются один раз
• Это работает и с
dict
, и с set
, и с любыми объектами • Даже опытные Python-разработчики иногда "попадаются" на этом
🎯 Отлично подходит для проверки глубокого понимания поведения функций в Python.
BY Python RU
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/pro_python_code/1804